
namespace xyx
{
    template<class Iterator,class Ref, class Ptr>
    struct ReverseIterator
    {
        typedef ReverseIterator<Iterator,Ref,Ptr> Self;
       
        Iterator _it;
        
        ReverseIterator(Iterator it)
            :_it(it)
        {}


        Ref operator*()
        {
            Iterator tmp = _it;
            return *(--tmp);
        }

        Ptr operator->()
        {
            return &(operator*());
        }

        Self operator++()
        {
            --_it;
            return *this;
        }

        Self operator--()
        {
            ++_it;
            return *this;
        }

        bool operator!=(const Self& s)
        {
            return _it != s._it;
        }

    };

}
